package com.softer.chengxin.dongle.dao;

import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.corp.domin.Corp;
import com.softer.chengxin.dongle.dao.provider.DongleDaoProvider;
import com.softer.chengxin.dongle.domin.DongleInfoDTO;
import com.softer.chengxin.dongle.domin.DongleInfoVO;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;
import java.util.Map;

/**
 * @author Gong Zhiyang
 * @date 2018/9/26
 */
@Mapper
@Repository
public interface DongleDao {

    /**
     * 获取加密狗设备列表
     *
     * @param id   企业ID
     * @param area 所管理的区域
     * @return 结果集
     */
    @SelectProvider(type = DongleDaoProvider.class, method = "loadDongleInfo")
    List<DongleInfoVO> loadDongleInfo(@Param("id") Integer id, @Param("area") String area);

    /**
     * 加密设备删除
     *
     * @param id 加密狗ID
     * @return 处理结果
     */
    @Delete("DELETE FROM dong_leinfo WHERE id =#{id}")
    int deleteDongleInfo(@Param("id") Integer id);

    /**
     * 项目加密设备删除
     *
     * @param id 项目ID
     * @return 处理结果
     */
    @Delete("DELETE FROM dong_leinfo WHERE project_id =#{id}")
    int deleteProjectDongle(@Param("id") Integer id);

    /**
     * 检测该加密狗是否绑定过
     *
     * @param key 加密狗信息
     * @return 加密狗信息
     */
    @Select("SELECT key_code FROM dong_leinfo WHERE key_code=#{key} and state=1")
    String getKeyDog(@Param("key") String key);

    /**
     * 检测该加密狗是否绑定过企业
     *
     * @param key 加密狗信息
     * @return 加密狗信息
     */
    @Select("SELECT key_code FROM dong_leinfo WHERE key_code=#{key}")
    String getKeyDogIsBind(@Param("key") String key);

    /**
     * 加密狗设备添加
     *
     * @param dongleInfoDTO 加密狗信息
     * @return 添加结果
     */
    @Insert("INSERT INTO dong_leinfo (key_code,corp_id,project_id,allot_date,allo_ter,state,iszy) " +
            " VALUES(#{di.KeyDog},#{di.Cid},#{di.Pid},now(),#{di.alloTer},#{di.State},#{di.IsZy})")
    int addDongleInfo(@Param("di") DongleInfoDTO dongleInfoDTO);

    /**
     * 查询企业下绑定的机密狗集合
     *
     * @param id 企业ID
     * @return 机密狗集合
     */
    @Select("SELECT key_code FROM dong_leinfo WHERE corp_id=#{cid} and state=1")
    List<String> getKeyDogList(@Param("cid") String id);

    /**
     * 加密狗检测
     *
     * @param keyDog
     * @return
     */
    @Select("SELECT id,corp_id ,project_id FROM dong_leinfo WHERE key_code=#{keyDog} AND state=1")
    Map checkKeyDog(String keyDog);

    @Select("select state from dong_leinfo WHERE key_code=#{keyDog}")
    Integer checkKeydog(String keyDog);

    /**
     * 修改加密狗状态
     *
     * @param id    令牌号
     * @param state 状态
     * @return 结果
     */
    @Update("update dong_leinfo set state=#{state} where id=#{id}")
    int update(@Param("id") Integer id, @Param("state") Integer state);
    /**
     * 修改项目加密狗状态
     *
     * @param id    项目ID
     * @param state 状态
     * @return 结果
     */
    @Update("update dong_leinfo set state=#{state} where project_id=#{id}")
    int updateProjectDongle(@Param("id") Integer id, @Param("state") Integer state);

    /**
     * 根据ID查询加密狗
     *
     * @param id ID
     * @return 加密狗
     */
    @Select("SELECT key_code FROM dong_leinfo WHERE id=#{id} ")
    String getKey(@Param("id") Integer id);

    /**
     * 根据项目ID查询加密狗
     *
     * @param id 项目ID
     * @return 加密狗
     */
    @Select("SELECT key_code FROM dong_leinfo WHERE project_id=#{id} ")
    String getKeyByProjectId(@Param("id") Integer id);

    /**
     * 查询企业是否绑定加密狗
     *
     * @param id 企业id
     * @return 结果
     */
    @Select("SELECT key_code FROM dong_leinfo WHERE corp_id=#{cid} and iszy=1")
    String getCorpKeyDog(@Param("cid") String id);


    /**
     * 查询企业加密狗数量
     *
     * @param id 企业
     * @return 数量
     */
    @SelectProvider(type = DongleDaoProvider.class, method = "countQyDongleNum")
    int countQyDongleNum(@Param("id") Integer id);

    /**
     * 查询企业加密狗列表
     *
     * @param page 页面实体
     * @param id   企业
     * @return 列表
     */
    @SelectProvider(type = DongleDaoProvider.class, method = "countQyDongleList")
    List<DongleInfoVO> countQyDongleList(@Param("page") Page page, @Param("id") Integer id);

    /**
     * 主管部门获取加密狗企业数量
     *
     * @param name  企业名
     * @param state 状态
     * @param area  管理区域
     * @return 数量
     */
    @SelectProvider(type = DongleDaoProvider.class, method = "loadCorpNum")
    int loadCorpNum(@Param("name") String name, @Param("state") String state, @Param("area") String area);

    /**
     * 主管部门获取加密狗企业集合
     *
     * @param page  页面实体
     * @param name  企业名
     * @param state 状态
     * @param area  管理区域
     * @return 集合
     */
    @SelectProvider(type = DongleDaoProvider.class, method = "loadCorpList")
    List<Corp> loadCorpList(@Param("page") Page page, @Param("name") String name, @Param("state") String state, @Param("area") String area);
}
